package com.plian.system.service.fr.bulletin;

import com.baomidou.mybatisplus.extension.service.IService;
import com.plian.system.entity.fr.bulletin.BulletinValue;
import com.plian.system.entity.fr.bulletin.NewBulletin;
import com.plian.system.model.ListResult;
import com.plian.system.model.R;
import com.plian.system.mybatis.support.Query;
import com.plian.system.vo.fr.bulletin.BulletinSummaryDetailVO;
import com.plian.system.vo.fr.bulletin.BulletinValueVO;
import com.plian.system.vo.fr.bulletin.NewBulletinVO;
import com.plian.system.vo.yth.YthExcelInfoVO;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.util.List;

/**
 * 服务类 快报主表
 *
 * @author gangan
 * @since 2021-02-02
 */
public interface INewBulletinService extends IService<NewBulletin> {

    /**
     *
     * @param year
     * @param bulletinId
     * @return
     */
    List<BulletinValue> getInitByYear(String year, String bulletinId);

    /**
     * 老数据导入到新表
     */
    void oldDataToNew();

    /**
     * 初始化报表
     * @param reportTime
     * @return
     */
    R originReport(String reportTime);

    /**
     * 删除
     * @param bulletinId
     * @return
     */
    R delete(String bulletinId);

    /**
     * 列表
     * @param query
     * @return
     */
    ListResult<NewBulletinVO> treeList(Query query);

    /**
     * 获取子节点
     * @param newBulletin
     * @return
     */
    ListResult<NewBulletinVO> childTree(NewBulletin newBulletin);

    /**
     * 保存
     * @param newBulletin
     * @return
     */
    R submit(NewBulletin newBulletin);

    /**
     * 可合并表
     * @param newBulletin
     * @return
     */
    ListResult<NewBulletinVO> childList(NewBulletin newBulletin);

    /**
     * 合并数
     * @param newBulletin
     * @return
     */
    ListResult<BulletinValue> childSummary(NewBulletin newBulletin);

    /**
     * 合并明细
     * @param bulletinValueVO
     * @return
     */
    ListResult<BulletinSummaryDetailVO> getSummaryDetail(BulletinValueVO bulletinValueVO);

    /**
     * 导入
     * @param multipartFile
     * @param reportTime
     * @return
     */
    R<NewBulletin> uploadFile(MultipartFile multipartFile, String reportTime);

    /**
     * 导出
     * @param newBulletinVO
     * @param response
     * @param os
     */
    void exportExcel(NewBulletinVO newBulletinVO, HttpServletResponse response, OutputStream os);

    /**
     * 报表树
     * @param newBulletin
     * @return
     */
    ListResult<NewBulletinVO> reportTree(NewBulletin newBulletin);

    /**
     * 根据年份获取单表数据
     * @param year
     * @param orgId
     * @return
     */
    List<NewBulletinVO> getSingleListByYear(String year, String orgId);

    /**
     * 根据年份获取合并表数据
     * @param year
     * @param orgId
     * @return
     */
    List<NewBulletinVO> getGroupListByYear(String year, String orgId);

    /**
     * 获取单个单户表 包含子表
     * @param newBulletinVO
     * @return
     */
    NewBulletinVO getSingleOneByParam(NewBulletinVO newBulletinVO);

    /**
     * 获取单个合并表 包含子表
     * @param newBulletinVO
     * @return
     */
    NewBulletinVO getGroupOneByParam(NewBulletinVO newBulletinVO);

    /**
     * 获取已填报月份
     * @Param orgIds
     * @param orgId
     * @param year
     * @param tableTypeCode
     * @return
     */
    List<Integer> findFillMonths(List<String> orgIds, String orgId, String year, String tableTypeCode);

    /**
     * 根据组织id获取 最新的填报时间
     * @return
     */
    String getMaxReportTimeByOrgId(String orgId);

    /**
     * 根据组织ids获取 最新的填报时间
     * @return
     */
    String getMaxReportTimeByOrgIds(List<String> orgIds);

    /**
     * 根据组织ids获取 最新的填报时间
     * @return
     */
    String getMaxReportTimeByOrgIdsAndType(List<String> orgIds, int type);

    /**
     * 根据年份获取审核完的数据
     * @param year
     * @return
     */
    List<NewBulletin> findFinishByYear(int year);

    /**
     * 根据年月获取审核完的数据
     * @param reportTime
     * @return
     */
    List<NewBulletin> findFinishByReportTime(String reportTime);

    /**
     * 快报数据对接
     * @param ythExcelInfoVO
     * @param multipartFile
     * @return
     */
    String ythExcelUpload(YthExcelInfoVO ythExcelInfoVO, MultipartFile multipartFile);
}
